home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / ASTRNOMY / AA_51.ZIP / CONSTEL.C < prev    next >
C/C++ Source or Header  |  1993-02-13  |  4KB  |  260 lines

  1. /* Constellation names
  2.  */
  3.  
  4. #include <stdio.h>
  5.  
  6. #define NCON 89
  7. char *constel[NCON] = {
  8. "And Andromedae",
  9. "Ant Antliae",
  10. "Aps Apodis",
  11. "Aql Aquilae",
  12. "Aqr Aquarii",
  13. "Ari Arietis",
  14. "Ara Arae",
  15. "Aur Aurigae",
  16. "Boo Bootis",
  17. "Cae Caeli",
  18. "Cam Camelopardalis",
  19. "Can Cancri",        /* also abbreviated Cnc */
  20. "Cap Capricorni",
  21. "Car Carinae",
  22. "Cas Cassiopeiae",
  23. "Cen Centauri",
  24. "Cep Cephei",
  25. "Cet Ceti",
  26. "Cha Chamaeleontis",
  27. "Cir Circini",
  28. "CMa Canis Majoris",
  29. "CMi Canis Minoris",
  30. "Cnc Cancri",
  31. "Col Columbae",
  32. "Com Comae Berenices",
  33. "CrA Coronae Austrinae",
  34. "CrB Coronae Borealis",
  35. "Crt Crateris",
  36. "Cru Crucis",
  37. "Crv Corvi",
  38. "CVn Canum Venaticorum",
  39. "Cyg Cygni",
  40. "Del Delphini",
  41. "Dor Doradus",
  42. "Dra Draconis",
  43. "Equ Equulei",
  44. "Eri Eridani",
  45. "For Fornacis",
  46. "Gem Geminorum",
  47. "Gru Gruis",
  48. "Her Herculis",
  49. "Hor Horologii",
  50. "Hya Hydrae",
  51. "Hyi Hydri",
  52. "Ind Indi",
  53. "Lac Lacertae",
  54. "Leo Leonis",
  55. "Lep Leporis",
  56. "Lib Librae",
  57. "LMi Leonis Minoris",
  58. "Lup Lupi",
  59. "Lyn Lyncis",
  60. "Lyr Lyrae",
  61. "Men Mensae",
  62. "Mic Microscopii",
  63. "Mon Monocerotis",
  64. "Mus Muscae",
  65. "Nor Normae",
  66. "Oct Octantis",
  67. "Oph Ophiuchi",
  68. "Ori Orionis",
  69. "Pav Pavonis",
  70. "Peg Pegasi",
  71. "Per Persei",
  72. "Phe Phoenicis",
  73. "Pic Pictoris",
  74. "PsA Piscis Austrini",
  75. "Psc Piscium",
  76. "Pup Puppis",
  77. "Pyx Pyxidis",
  78. "Ret Reticuli",
  79. "Scl Sculptoris",
  80. "Sco Scorpii",
  81. "Sct Scuti",
  82. "Ser Serpentis",
  83. "Sex Sextantis",
  84. "Sge Sagittae",
  85. "Sgr Sagittarii",
  86. "Tau Tauri",
  87. "Tel Telescopii",
  88. "TrA Trianguli Australis",
  89. "Tri Trianguli",
  90. "Tuc Tucanae",
  91. "UMa Ursae Majoris",
  92. "UMi Ursae Minoris",
  93. "Vel Velorum",
  94. "Vir Virginis",
  95. "Vol Volantis",
  96. "Vul Vulpeculae",
  97. };
  98.  
  99.  
  100.  
  101. /* Greek letters
  102.  */
  103.  
  104. #define NGREEK 24
  105. char *greek[NGREEK] = {
  106. "alpha",
  107. "beta",
  108. "gamma",
  109. "delta",
  110. "epsilon",
  111. "zeta",
  112. "eta",
  113. "theta",
  114. "iota",
  115. "kappa",
  116. "lambda",
  117. "mu",
  118. "nu",
  119. "xi",
  120. "omicron",
  121. "pi",
  122. "rho",
  123. "sigma",
  124. "tau",
  125. "upsilon",
  126. "phi",
  127. "chi",
  128. "psi",
  129. "omega",
  130. };
  131.  
  132. static int islow(), isup(), isnumber(), skipwh();
  133.  
  134. int showcname( in )
  135. char *in;
  136. {
  137. char *g, *p, *q;
  138. char ans[80];
  139. int i;
  140.  
  141.  
  142. p = in;
  143. q = ans;
  144.  
  145.  
  146. skipwh(p);
  147. if( isnumber(p) )
  148.     {
  149.     while( isnumber(p) )
  150.         *q++ = *p++;
  151.     }
  152. skipwh(p);
  153. *q++ = ' ';
  154.  
  155. if( islow(p) )
  156.     {
  157.     for( i=0; i<NGREEK; i++ )
  158.         {
  159.         g = greek[i];
  160.         if( (*p == *g) && (*(p+1) == *(g+1)) )
  161.             break;
  162.         }
  163.     if( i < NGREEK )
  164.         {
  165.         while( *g != '\0' )
  166.             *q++ = *g++;
  167.         }
  168.     while( islow(p) )
  169.         ++p;
  170.     }
  171. skipwh(p);
  172. /* copy things like "-a" until uppercase letter found */
  173. while( (*p != '\0') && !isup(p) )
  174.     *q++ = *p++;
  175.  
  176. *q++ = ' ';
  177.  
  178. if( isup(p) )
  179.     {
  180. /* Check the list of constellation names */
  181.     for( i=0; i<NCON; i++ )
  182.         {
  183.         g = constel[i];
  184.         if( (*p == *g) && ( *(p+1) == *(g+1) )
  185.             && ( *(p+2) == *(g+2) ) )
  186.             break;
  187.         }
  188. /* Get the name found */
  189.     if( i < NCON )
  190.         {
  191.         g += 4;
  192.         while( *g != '\0' )
  193.             *q++ = *g++;
  194.         p += 3;
  195.         }
  196.     }
  197. skipwh(p);
  198. *q++ = ' ';
  199. while( *p )
  200.     *q++ = *p++;
  201. *q++ = '\0';
  202. /* convert all '_' characters to spaces */
  203. q = ans;
  204. while( *q != '\0' )
  205.     {
  206.     if( *q == '_' )
  207.         *q = ' ';
  208.     ++q;
  209.     }
  210. printf( "\n              %s\n", ans );
  211. return(0);
  212. }
  213.  
  214.  
  215.  
  216.  
  217. static int islow(p)
  218. char *p;
  219. {
  220. if( (*p >= 'a') && (*p <= 'z') )
  221.     return(1);
  222. else
  223.     return(0);
  224. }
  225.  
  226.  
  227.  
  228. static int isup(p)
  229. char *p;
  230. {
  231. if( (*p >= 'A') && (*p <= 'Z') )
  232.     return(1);
  233. else
  234.     return(0);
  235. }
  236.  
  237.  
  238.  
  239.  
  240. static int isnumber(p)
  241. char *p;
  242. {
  243. if( (*p >= '0') && (*p <= '9') )
  244.     return(1);
  245. else
  246.     return(0);
  247. }
  248.  
  249.  
  250.  
  251. static int skipwh(p)
  252. char *p;
  253. {
  254. while( ((*p == ' ') || (*p == '\t') || (*p == '_'))
  255.     && (*p != '\0') && (*p != '\n') && (*p != '\r') )
  256.         ++p;
  257. return(0);
  258. }
  259.  
  260.